/********************************************************
 *
 * File Name: Player.java
 *
 * Purpose:
 *
 * Created By: TA - Soheil Hassas Yeganeh 
 * Date Created: Wednesday March 16, 2011.
 * Last Modified: Wednesday March 16, 2011.
 *
 ********************************************************/
package ca.utoronto.utm.csc301.euchre.player;

import java.util.List;
import ca.utoronto.utm.csc301.euchre.common.Card;
import ca.utoronto.utm.csc301.euchre.common.Suit;

public interface Player {

    /************************************************
     * This is used for setting the id of a player.
     *
     * @param id It is the id of the player which is
     *      set by the Game Manager.
     ************************************************/
    public void setId(int id);

    /************************************************
     * This method is called when a new hand is started.
     *      It is called by the game manager.
     *
     * @param hand The list of cards for the player.
     ************************************************/
    public void setHand(List<Card> hand);

    /************************************************
     * It called for each player for bidding.
     *
     * @param isTheFirstBid indicates whether
     *          this is the first bidding round or not.
     * @return The trump suit, or null if the player
     *          do not want to make trump.
     ***********************************************/
    public Suit makeTrump(boolean isTheFirstBid);

    /***********************************************
     * It shows whether the player wants to go it alone
     *
     * @return true if the player wants to go it alone,
     *          otherwise false.
     ***********************************************/
    public boolean isGoingAlone();

    /***********************************************
     * It is called for the dealer player to pick
     *      the top card up and drop a card from his hand.
     *
     * @return the dropped card.
     **********************************************/
    public Card pick();

    /**********************************************
     * It is called when a player must play a card.
     *
     * @return the card played.
     **********************************************/
    public Card play();
}

